package org.batatasframework.chart;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import org.batatasframework.chart.columns.ChartColumnAxis;

/**
 * <pre>返回一个数据库查询的结果集，这个结果集可以返回指定的axis信息，也就是可以用来做统计的字段；
 * 如：地区、年份等字段可以用来当作axis轴，分x、y axis
 * </pre>
 * @author jackson
 *
 */
public class ChartQueryResult implements Iterable<Object>{
	
	/** 从数据库读取的数据 */
	private List<Object> items;
	
	/** 由具体子类决定的统计项信息 */
	private ChartColumnAxis axis;
	
	/** 是否进行分组处理。如果统计工作已经在sql查询语句里处理了，就不需要在程序里进行分组处理；
	 * 如果需要由程序进行分组处理的，这里需要返回值"true"。 */
	private boolean groupable;
	
	/** 创建一个空数组，表示在后面的解析代码里，可以加入查询结果 */
	public ChartQueryResult(){
		this.items = Collections.emptyList();
	}
	
	/** 带有返回结果参数的构造函数 */
	public ChartQueryResult(List<Object> items){
		this.items = items;
	}
	
	public ChartQueryResult add(List<Object> items){
		if(this.items instanceof ArrayList) this.items.addAll(items);
		if(null == this.items) this.items = items;
		List<Object> tems = new ArrayList<>(this.items.size() + items.size());
		tems.addAll(items);
		tems.addAll(this.items);
		return this;
	}

	@Override
	public Iterator<Object> iterator() {
		return items.iterator();
	}
	
	public ChartColumnAxis getAxis() {
		return axis;
	}

	public boolean isGroupable() {
		return groupable;
	}

	/** 需要在处理程序里对返回的结果进行分组处理；
	 * @see #groupable */
	public ChartQueryResult groupable() {
		this.groupable = true;
		return this;
	}
}
